C++游戏

text::C++


一、新建窗口项目

1 新建项目

official::Windows 和消息 - Win32

VSStudio——新建项目——Windows桌面应用程序——新建(此处项目名为PvZ)

// PvZ.cpp : 定义应用程序的入口点。
//

#include "framework.h"
#include "PvZ.h"

#define MAX_LOADSTRING 100

// 全局变量:
HINSTANCE hInst; // 当前实例
WCHAR szTitle[MAX_LOADSTRING]; // 标题栏文本
WCHAR szWindowClass[MAX_LOADSTRING]; // 主窗口类名

// 此代码模块中包含的函数的前向声明:
ATOM MyRegisterClass(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM);

int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPWSTR lpCmdLine,
_In_ int nCmdShow)
{
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);

// TODO: 在此处放置代码。

// 初始化全局字符串
LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
LoadStringW(hInstance, IDC_PVZ, szWindowClass, MAX_LOADSTRING);
MyRegisterClass(hInstance);

// 执行应用程序初始化:
if (!InitInstance(hInstance, nCmdShow))
{
return FALSE;
}

HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_PVZ));

MSG msg;

// 主消息循环:
while (GetMessage(&msg, nullptr, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}

return (int)msg.wParam;
}

2 MyRegisterClass

注册窗口类

ATOM MyRegisterClass(HINSTANCE hInstance);

// 顶端栏,去除可以改成NULL
wcex.lpszMenuName = MAKEINTRESOURCEW(IDC_PVZ);

3 InitInstance

保存实例句柄并创建主窗口

在此函数中,我们在全局变量中保存实例句柄并创建和显示主程序窗口

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow);

// 窗口设定(禁止最大化和拉动窗口,去除功能只需要 &~ 再加对应的属性名即可)
HWND hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW & ~WS_THICKFRAME & ~WS_MAXIMIZEBOX,CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr);

// 修改窗口大小,写在ShowWindow前(句柄,窗口位置,窗口大小,是否重新绘制窗口)
MoveWindow(hWnd, 0, 0, 1280, 720, false);

4 WndProc

处理主窗口的消息

  • WM_COMMAND:处理应用程序菜单
  • WM_PAINT:绘制主窗口
  • WM_DESTROY:发送退出消息并返回
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);

5 About

“关于”框的消息处理程序

INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);

二、游戏逻辑基础

1 多线程

2 图像处理


三、脚本案例